package com.javaee.wordtree.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.javaee.wordtree.entity.ModelMessage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.annotations.Delete;

import java.util.List;

/**
 * 模型消息Mapper接口
 */
@Mapper
public interface ModelMessageMapper extends BaseMapper<ModelMessage> {
    /**
     * 根据聊天ID查询所有消息
     * 
     * @param chatId 聊天ID
     * @return 该聊天的所有消息
     */
    @Select("SELECT * FROM model_messages WHERE chat_id = #{chatId} ORDER BY created_time ASC")
    List<ModelMessage> findMessagesByChatId(@Param("chatId") Integer chatId);

    /**
     * 根据聊天ID查询最近的指定数量消息（用于上下文）
     * 
     * @param chatId 聊天ID
     * @param limit  限制的消息数量
     * @return 最近的消息列表
     */
    @Select("SELECT * FROM model_messages WHERE chat_id = #{chatId} ORDER BY created_time DESC LIMIT #{limit}")
    List<ModelMessage> findRecentMessagesByChatId(@Param("chatId") Integer chatId, @Param("limit") Integer limit);

    /**
     * 更新指定消息的内容
     * 
     * @param messageId  消息ID
     * @param newContent 新的消息内容
     * @return 影响的行数
     */
    @Update("UPDATE model_messages SET text = #{newContent}, created_time = NOW() WHERE message_id = #{messageId}")
    int updateMessageContent(@Param("messageId") Integer messageId, @Param("newContent") String newContent);

    /**
     * 删除指定时间之后的所有消息
     * 
     * @param chatId    聊天ID
     * @param afterTime 指定时间之后
     * @return 删除的行数
     */
    @Delete("DELETE FROM model_messages WHERE chat_id = #{chatId} AND created_time > #{afterTime}")
    int deleteMessagesAfterTime(@Param("chatId") Integer chatId, @Param("afterTime") String afterTime);

    /**
     * 删除指定消息ID及其之后的所有消息（基于创建时间）
     * 
     * @param chatId    聊天ID
     * @param messageId 消息ID
     * @return 删除的行数
     */
    @Delete("DELETE FROM model_messages WHERE chat_id = #{chatId} AND created_time >= (SELECT t.created_time FROM (SELECT created_time FROM model_messages WHERE message_id = #{messageId}) t)")
    int deleteMessagesAfterMessage(@Param("chatId") Integer chatId, @Param("messageId") Integer messageId);

    /**
     * 获取指定消息的创建时间
     * 
     * @param messageId 消息ID
     * @return 创建时间
     */
    @Select("SELECT created_time FROM model_messages WHERE message_id = #{messageId}")
    String getMessageCreatedTime(@Param("messageId") Integer messageId);

    /**
     * 根据聊天ID和创建时间删除消息
     * 
     * @param chatId      聊天ID
     * @param createdTime 创建时间
     * @return 删除的行数
     */
    @Delete("DELETE FROM model_messages WHERE chat_id = #{chatId} AND created_time >= #{createdTime}")
    int deleteMessagesByTimeAndAfter(@Param("chatId") Integer chatId, @Param("createdTime") String createdTime);
}